
unit MainFrm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, 
  Controls, Forms, Dialogs,ExtCtrls, StdCtrls;

type
  TMainForm = class(TForm)
    imgCopyFrom: TImage;
    imgCopyTo    : TImage;
 
    btnDraw: TButton;
    btnCopy: TButton;
 
    cbCopyMode: TComboBox;
  
    procedure FormCreate(Sender: TObject);
    procedure btnCopyClick(Sender: TObject);
    procedure btnDrawClick(Sender: TObject);
 
 private
    { Private declarations }

  public
    procedure GetCanvasRect(AImage: TImage; 
                                                                       var ARect: TRect);
    procedure DrawImages;
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.DFM}

procedure TMainForm.DrawImages;
var
R: TRect;
begin
with imgCopyTo.Canvas do
begin
Brush.Style := bsSolid;
Brush.Color := clWhite;
GetCanvasRect(imgCopyTo, R);
FillRect(R);
Brush.Color := clRed;
Ellipse(10, 10, 100, 100);
end;

with imgCopyFrom.Canvas do
begin
Brush.Style := bsSolid;
Brush.Color := clWhite;
GetCanvasRect(imgCopyFrom, R);
FillRect(R);
Brush.Color := clBlue;
Ellipse(30, 30, 120, 120);
end;
end;


procedure TMainForm.GetCanvasRect(AImage: TImage; 
                                                                         var ARect: TRect);
var
R: TRect;
begin
R := AImage.Canvas.ClipRect; 
with AImage do begin
ARect.TopLeft := Point(0, 0);
ARect.BottomRight := Point(Width, Height);
end;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
cbCopyMode.ItemIndex := 0;
DrawImages;
end;

procedure TMainForm.btnCopyClick(Sender: TObject);
var
cm: Longint;
CopyToRect,
CopyFromRect: TRect;

begin
case cbCopyMode.ItemIndex of
0: cm := cmBlackNess;
1: cm := cmDstInvert;
2: cm := cmMergeCopy;
3: cm := cmMergePaint;
4: cm := cmNotSrcCopy;
5: cm := cmNotSrcErase;
6: cm := cmPatCopy;
7: cm := cmPatInvert;
8: cm := cmPatPaint;
9: cm := cmSrcAnd;
10: cm := cmSrcCopy;
11: cm := cmSrcErase;
12: cm := cmSrcInvert;
13: cm := cmSrcPaint;
14: cm := cmWhiteness;
    else
cm := cmSrcCopy;
         end;

imgCopyTo.Canvas.CopyMode := cm;
GetCanvasRect(imgCopyTo, CopyToRect);
GetCanvasRect(imgCopyFrom, CopyFromRect);
         
imgCopyTo.Canvas.CopyRect(CopyToRect, 
                                imgCopyFrom.Canvas, CopyFromRect);
end;

procedure TMainForm.btnDrawClick(Sender: TObject);
begin
    DrawImages;  
end;

end.
